const multer = require('multer');
const path = require('path');
const fs = require('fs');
const jwt = require('jsonwebtoken');

const baseURL = "http://localhost:3030/";

// 设置存储配置 - 头像
const upload = multer({
    storage: multer.diskStorage({
        // 配置文件存放目录 - 磁盘存储
        destination: (req, file, cb) => {
            let token =  req.headers.authorization;
            token = token.replace('Bearer ','');
            let secret = process.env["SIGN_KEY"];
            let jwtDecoded = jwt.verify(token, secret, (error, decoded) => {
                if(error) throw new Error(error);
                return decoded;
            });
            let dest = path.join(__dirname, `../public/userpic/${jwtDecoded.data.id.toString()}`); // 用户id命名
            // fs.existsSync(目录名)：判断文件目录是否存在
            if (!fs.existsSync(dest)) {
                // fs.mkdirSync()：没有则创建
                fs.mkdirSync(dest, { recursive: true });
            };
    
            // 新头像文件代替旧头像文件：
            let olduserpic = fs.readdirSync(dest);
            // fs.readdirSync(目录名)：读取文件目录下的子文件，返回子文件名组成的数组
            if (olduserpic.length) {
                // 若存在文件，则删除
                fs.unlinkSync(`${dest}/${olduserpic[0]}`);
            };
            cb(null, dest);
        },
        // 配置文件名
        filename: (req, file, cb) => {
            cb(null, Date.now().toString()); // 用时间戳命名 文件名不能为纯数字
        }
    })
});

// 设置存储配置 - 文章
const uploadArticle = multer({
    storage: multer.diskStorage({
        // 配置文件存放目录 - 磁盘存储
        destination: (req, file, cb) => {
            let dest = path.join(__dirname, `../public/articleimg`);
            cb(null, dest);
        },
         // 配置文件名
         filename: (req, file, cb) => {
            cb(null, Date.now().toString()); // 用时间戳命名 文件名不能为纯数字
        }
    })
})

module.exports = {
    baseURL,
    upload
};